//发送
#include <ESP8266WiFi.h>
#include <espnow.h>

#define KEY 2

int keyv=0;
//接收方MAC地址 根据自己的板子修改
uint8_t broadcastAddress[] = {0xBC, 0xFF, 0x4D, 0x2B, 0x74, 0xAC};
 
 //定义的消息体，也就是发送端要发送的内容
typedef struct struct_message {
  int isOpen;// 等于1表示打开，等于0关闭
} struct_message;

// Create a struct_message called myData
struct_message myData;
 
//这是一个回调函数，将在发送消息时执行。
//在这种情况下，无论是否成功发送该消息，都会简单地打印出来
void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
  Serial.print("Last Packet Send Status: ");
  if (sendStatus == 0){
    Serial.println("Delivery success");
  }
  else{
    Serial.println("Delivery fail");
  }
}
 
void setup() {
  //初始化串行监视器以进行调试
  Serial.begin(115200);

  //将设备设置为Wi-Fi站点
  WiFi.mode(WIFI_STA);

  //立即初始化ESP
  if (esp_now_init() != 0) {
  Serial.println("Error initializing ESP-NOW");
  return;
  }
  pinMode(KEY,INPUT_PULLUP);
  digitalWrite(KEY,HIGH);
 
  //设置ESP8266角色  ESP_NOW_ROLE_CONTROLLER， ESP_NOW_ROLE_SLAVE， 
  //ESP_NOW_ROLE_COMBO， ESP_NOW_ROLE_MAX。
  esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
  //先前创建的功能。
  esp_now_register_send_cb(OnDataSent);
  
  //与另一个ESP-NOW设备配对以发送数据
  esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
}
 
void loop() {

   //配置要发送的值
  myData.isOpen=digitalRead(KEY);
  
  //发送消息
  esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));

  Serial.print("myData.isOpen = ");
  Serial.println(myData.isOpen);
  //延时两秒
  delay(500);
}